/**
 * 基类
 * 坐标均相对于编辑窗口    坐标单位：mm
 */
if(typeof (module) !="undefined"){
    module.exports = PrintObj; // 继承第1/2步（基类）：导出

    var Serializer = require('./Serializer');
    var FEffectBase = require('./../color/FEffectBase');
}


function PrintObj()
{
    Serializer.call(this);

    this.x = 0; //左上角坐标x
    this.y = 0; //左上角坐标y
    this.w = 0;
    this.h = 0;
    this.al = 1;// alpha 透明度
    this.an = 0; // angle角度
    this.sc = 1.0; //scale缩放											--新增
    this.tn = ''; // template-name,模板中可替换部分的名称              --新增
    this.lk = false;//lock, true表示锁定，false表示可编辑  				--新增
    this.r = false;// replaceable, true表示可替换，false表示不可替换（用途：照片替换占位符）
    this.rid = 0; // 可替换图片的Id（全模版唯一）
    this.ef = null;//effect array,特效 									--新增
    this.tk = 0;// key-id,模板中的内容类型，例如表示商品图片、商品名称等   	--新增

    this.id = -1; // 自己的id
    this.offset = -1; // 在父节点中的偏移量
    this.pageIndex = -1; // 当前页在整个页面集中的位置(第几页)
    this.parent = -1; //父节点的id
}
PrintObj.prototype = new Serializer();

// 转成json字符串
PrintObj.prototype.toJson = function(){
    var superJson = Serializer.prototype.toJson.call(this);
    superJson = superJson.substr(1,superJson.length-2);

    var ret = '{';
    ret += superJson;
    ret +=',';
    ret +=('"x":'+this.x);
    ret +=',';
    ret +=('"y":'+this.y);
    ret +=',';
    ret +=('"w":'+this.w);
    ret +=',';
    ret +=('"h":'+this.h);
    ret +=',';
    ret +=('"al":'+this.al);
    ret +=',';
    ret +=('"an":'+this.an);

    ret +=',';
    ret +=('"sc":'+this.sc);

    ret +=',';
    ret +=('"lk":'+this.lk);

    ret +=',';
    ret +=('"r":'+this.r);

    ret +=',';
    ret +=('"rid":'+this.rid);

    ret +=',';
    ret +=('"ef":[');
    if(this.ef && this.ef.length>0){
        // effect 的内容待定
        var first = true;
        for(var m=0;m<this.ef.length;m++){
            // 过滤掉错误数据
            if(!this.ef[m])
                continue;

            if(!first){
                ret +=',';
            }
            ret += this.ef[m].toJson();

            first =false;
        }
    }
    ret +=']';
    ret +=',';
    ret +=('"tk":'+this.tk);
    ret +=',';
    ret +=('"tn":'+'"'+this.tn+'"');

    // 多存储一些数据
    if(this.hasOwnProperty('pageIndex')){
        ret +=',';
        ret +=('"pageIndex":'+this.pageIndex);
    }
    if(this.hasOwnProperty('id')){
        ret +=',';
        ret +=('"id":'+this.id);
    }
    if(this.hasOwnProperty('offset')){
        ret +=',';
        ret +=('"offset":'+this.offset);
    }
    if(this.hasOwnProperty('parent')){
        ret +=',';
        ret +=('"parent":'+this.parent);
    }


    ret+='}';
    return ret;
}
// 从json对象中解析出
PrintObj.prototype.fromJson = function(jsonObj, versionId){ // 继承第2/2步（基类）：给原型链增加要继承的函数
    Serializer.prototype.fromJson.call(this,jsonObj,versionId);

    this.x=jsonObj.x;
    this.y=jsonObj.y;
    this.w=jsonObj.w;
    this.h=jsonObj.h;
    this.al=jsonObj.al;
    this.an=jsonObj.an;
    this.sc=jsonObj.sc;

    if(jsonObj.hasOwnProperty("tn")){
        this.tn=jsonObj.tn;
    }
    this.lk=jsonObj.lk;
    this.r=jsonObj.r;
    this.rid=jsonObj.rid;
    if(jsonObj.hasOwnProperty("ef")){
        // effect 的内容待定
        this.ef = new Array();
        for(var m=0;m<jsonObj.ef.length;m++){
            var effect = FEffectBase.prototype.fromUnknownJson(jsonObj.ef[m],versionId);
            this.ef.push(effect);
        }

    }
    this.tk=jsonObj.tk;

    if(jsonObj.hasOwnProperty('id'))
        this.id = jsonObj.id; // 自己的id
    if(jsonObj.hasOwnProperty('offset'))
        this.offset = jsonObj.offset; // 在父节点中的偏移量
    if(jsonObj.hasOwnProperty('pageIndex'))
        this.pageIndex = jsonObj.pageIndex; // 当前页在整个页面集中的位置(第几页)
    if(jsonObj.hasOwnProperty('parent'))
        this.parent =jsonObj.parent; //父节点的id
}


// 取得图像滤镜
PrintObj.prototype.imgFilter=function(){
    if(this.ef==null)   return null;

    for(var i=0; i<this.ef.length; i++){
        var one = this.ef[i];
        if(one.type == FEffectBase.prototype.TYPE_IMAGE_FILTER){
            return one.f;
        }
    }
    return null;
}
// 风格化效果
PrintObj.prototype.style = function()
{
    if(this.ef==null)   return null;

    for(var i=0; i<this.ef.length; i++){
        var one = this.ef[i];
        if(one.type == FEffectBase.prototype.TYPE_STYLIZE_SHADOW){
            return one;
        }
    }
    return null;
}

PrintObj.prototype.color=function()
{
    if(this.ef==null)   return null;

    for(var i=0; i<this.ef.length; i++){
        var one = this.ef[i];
        if(one.type == FEffectBase.prototype.TYPE_COLOR || one.type == FEffectBase.prototype.TYPE_GRADIENT){
            return one;
        }
    }
    return null;

}
// 取得描边宽度
PrintObj.prototype.strokeWidth=function()
{
    if(this.ef==null)   return null;

    for(var i=0; i<this.ef.length; i++){
        var one = this.ef[i];
        if(one.type == FEffectBase.prototype.TYPE_STROKE){
            return one.w;
        }
    }
    return null;

}
// 取得line cap
PrintObj.prototype.lineCap=function()
{
    if(this.ef==null)   return null;

    for(var i=0; i<this.ef.length; i++){
        var one = this.ef[i];
        if(one.type == FEffectBase.prototype.TYPE_STROKE){
            return one.lc;
        }
    }
    return null;
}
// 取得line join
PrintObj.prototype.lineJoin=function()
{
    if(this.ef==null)   return null;

    for(var i=0; i<this.ef.length; i++){
        var one = this.ef[i];
        if(one.type == FEffectBase.prototype.TYPE_STROKE){
            return one.lj;
        }
    }
    return null;
}
// 取得miter limit
PrintObj.prototype.miterLimit=function()
{
    if(this.ef==null)   return null;

    for(var i=0; i<this.ef.length; i++){
        var one = this.ef[i];
        if(one.type == FEffectBase.prototype.TYPE_STROKE){
            return one.m;
        }
    }
    return null;

}



// 描边颜色
PrintObj.prototype.strokeColor = function()
{
    if(this.ef==null)   return null;

    for(var i=0; i<this.ef.length; i++){
        var one = this.ef[i];
        if(one.type == FEffectBase.prototype.TYPE_STROKE){
            return one.c;
        }
    }
    return null;
}
// 取得对象的叶节点
PrintObj.prototype.getLeafObjs= function(){
    var ret = new Array();
    ret.push(this);
    return ret;
}
/**
 * 取得模板中所有文字的轮廓 的di,
 * 返回：数组
 */
PrintObj.prototype.getTextContourDis = function(){
    var ret = new Array();
    return ret;
}
/**
 * 设置所有文字的轮廓
 * 参数：vectors： TVectorModel类型的数组
 */
PrintObj.prototype.setTextContour = function(vectors){

}
/**
 * 取得模板中所有文字对象,
 * 参数：ignoreEmpty   Di，true表示需要过滤掉无效di的文字对象
 * 返回：数组
 */
PrintObj.prototype.getTextObjs = function(ignoreEmptyDi){
    var ret = new Array();
    return ret;
}
/**
 * 取得模板中所有图形对象,
 * 参数：ignoreEmpty   Di，true表示需要过滤掉无效di的文字对象
 * 返回：数组
 */
PrintObj.prototype.getGraphObjs = function(ignoreEmptyDi){
    var ret = new Array();
    return ret;
}
/**
 * 取得自身中所有图片对象,
 * 返回：数组
 */
PrintObj.prototype.getImageObjs = function(){
    var ret = new Array();
    return ret;
}
/**
 * 将图片阴影插入到from下面,
 * 参数;
 *      shadowImage(imageObj对象)
 *
 */
PrintObj.prototype.insertShadowImgObj = function(shadowImage){

}
/**
 * 设置颜色模式
 */
PrintObj.prototype.setColorMode = function(cm){
    this.colorMode = cm;
}

/** 简化可替换group,将子对象中非可替换部分删除
 * 返回：true表示是可替换对象，false表示无
 */
PrintObj.prototype.simplifyReplaceGroup = function (){
    return this.r;
}